package ren.wxyz.algorithm.memdb;

import java.util.ArrayList;
import java.util.List;

/**
 * 表模型
 * @author zxwang
 * @dateTime 2014年11月20日 下午4:12:12
 */
public class DataTable<T extends Cloneable> {

	private List<T> records = new ArrayList<T>();
	
	public DataTable(Class<?> recordClass) {
		
	}
	
	/**
	 * 添加记录
	 * @param record
	 */
	public void addRecord(T record) {
		records.add(record);
	}
	
	/**
	 * 查询数据
	 * @param where 查询条件对象
	 * @param topN 前n个
	 * @return 满足条件的数据集
	 */
	public List<T> query(Whereable<T> where, int topN) {
		List<T> data = new ArrayList<T>();
		
		int total = topN;
		int index = 0;
		// 验证topN的状态
		if (total < 0) {
			total = records.size();
		}
		
		// 遍历数据
		for (T obj : records) {
			if (index++ < total && where.where(obj) != null) {
				data.add(obj);
			}
		}
		
		return data;
	}
	
	/**
	 * 查询全部数据
	 * @param where 查询条件对象
	 * @return 满足条件的数据集
	 */
	public List<T> query(Whereable<T> where) {
		return query(where, -1);
	}
	
	/**
	 * 查询一条数据
	 * @param where 查询条件
	 * @return 满足条件的一条数据
	 */
	public T queryOne(Whereable<T> where) {
		for (T obj : records) {
			if (where.where(obj) != null) {
				return obj;
			}
		}
		
		return null;
	}
	
	/**
	 * 遍历所有满足条件的项，并统计满足条件的项
	 * @param where 过滤规则对象
	 * @return 满足条件的项
	 */
	public int update(Whereable<T> where) {
		int count = 0;
		for (T obj : records) {
			if (where.where(obj) != null) {
				count++;
			}
		}
		
		return count;
	}
}
